package fmppc.manager.entity;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import fmppc.basics.BasicsEntity;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;

import java.util.Objects;

/**
 * 名称: 实体主键属性拓展抽象
 *
 * @description: 雪花算法
 * @author: XXSD
 * @date: 2023-05-23 9:44
 */
@Data
@Slf4j
@Accessors(chain = true)
public class PropertyAssignKeyEntity<T> extends BasicsEntity<T> {

    private static final long serialVersionUID = 673270858052679374L;
    /**
     * 属性说明: 主键Key
     *
     * @date: 2023-05-21 23:57
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

//    /**
//     * 功能名称: 主键标识
//     *
//     * @return 实体主键Key
//     * @description: 解决前端精度问题
//     * @author: XXSD
//     * @date: 2023-07-15 20:20
//     */
//    public String getIdStr() {
//        return (this.id == null) ? null : this.id.toString();
//    }
//
//    /**
//     * 功能名称: 主键标识
//     *
//     * @param idStr 主键标识
//     * @description: 解决前端精度问题
//     * @author: XXSD
//     * @date: 2023-07-15 20:20
//     */
//    public void setIdStr(String idStr) {
//        try {
//            if(StringUtils.isNotEmpty(idStr)){
//                this.id = Long.valueOf(idStr);
//            }
//        } catch (Exception e) {
//            log.error("数据：{}；转换处理异常", idStr, e);
//        }
//    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        if (!super.equals(o)) {
            return false;
        }
        PropertyAssignKeyEntity<?> that = (PropertyAssignKeyEntity<?>) o;
        return Objects.equals(id, that.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), id);
    }
}
